union X {
    int;
    Y[];
};

union Y {
    X;
    Z;
};

union Z {
    double;
    X;
};

protocol mutualRecUnion {
child:
    async Test(X x, Y y, Z z);
    async __delete__();
};
